//
//  QpDataBaseManager.m
//  A_project
//
//  Created by Tiny on 16/1/29.
//  Copyright © 2016年 七平. All rights reserved.
//

#import "QpDataBaseManager.h"
#import "FMDatabase.h"
#import "FMDatabaseQueue.h"

@interface QpDataBaseManager ()
// 数据库对象管理
@property (nonatomic, retain) FMDatabase *fmdb;
@end
@implementation QpDataBaseManager
/**
 1.FMDB是iOS平台的SQLite数据库的OC级别的封装
 2.相比CoreData更轻量级
 3.提供了多线程安全的数据库操作方法, 更安全
 4.FMDataBase, 一个对象代表一个数据库
 5.FMResultSet, 执行查询后的结果集
 6.FMDataBaseQueue, 用于在子线程进行批量操作
 7.除了查询以外的操作都被称为更新
 8.查询叫做执行查询
 */
+ (QpDataBaseManager *)shareInstance
{
    /**< 静态指针变量 保证指针只有一个 */
    static QpDataBaseManager *dbManage = nil;
    // 判断是否是第一次调用该方法
    // 如果指针中为空 创建对象
    if (!dbManage) {
        // 单例中的alloc 不需要release
        dbManage = [[QpDataBaseManager alloc] init];
    }
    // 如果指针不为空 直接返回
    return dbManage;
}


/// 打开数据库
- (void)openDB
{
    /**< 数据库一般放在Documents */
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"collection.db"];
    NSLog(@"路径: %@", path);
    // 创建数据库对象
    self.fmdb = [[FMDatabase alloc] initWithPath:path];
    // 打开数据库
    BOOL result = [_fmdb open];
    // 判断
    if (result) {
        NSLog(@"数据库开启成功");
    }else{
        NSLog(@"数据库开启失败");
    }
}

/// 创建表
- (void)creatTable
{
    /* 
     * 1. SQL 语句
     * exsits 存在
     * text 字符串
     * integer 正数
     * primary key 主键
     * autoincrement 自动添加
    **/
    // SQL
    NSString *creatSQL = @"CREATE TABLE IF NOT EXISTS collection (number integer PRIMARY KEY AUTOINCREMENT, title text, url text)";

    [self executeSQL:creatSQL message:@"创建表"];
}

/// 删除表
- (void)dropTable
{
   // 1. SQL
    NSString *dropSQL = @"DROP TABLE collection";
    [self executeSQL:dropSQL message:@"删除表"];
}

/// 插入
- (void)insertCollection:(QpfmdbModel *)collection
{
    NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO collection (title, url) VALUES('%@', '%@')", collection.title, collection.url];
    [self executeSQL:insertSQL message:@"插入"];
}

/// 删除
- (void)deleteCollectionWithTitle:(NSString *)collectiontitle
{
    NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM collection WHERE title = '%@'", collectiontitle];
    [self executeSQL:deleteSQL message:@"删除数据"];
}
/// 更新
- (void)updateCollection:(QpfmdbModel *)collection Title:(NSString *)collectiontitle
{
    NSString *updateSQL = [NSString stringWithFormat:@"UPDATE lanou151129 SET title = '%@', url = '%@' WHERE title = %@", collection.title, collection.url, collectiontitle];
    [self executeSQL:updateSQL message:@"更新"];
}

/// 查询
- (NSMutableArray *)select
{
    // 返回需要返回的数据
    NSMutableArray *arr = [NSMutableArray array];
    NSString *selectSQL = @"SELECT * FROM  collection";
    //执行查询
    FMResultSet *resultSET = [_fmdb executeQuery:selectSQL];
    // resultSET 表示查询到的数据 通过遍历每一行信息 然后逐列 获取数据
    while ([resultSET next]) {
        // 获取每一列信息
        // number是0列
        // 获取方式: 列名/ 列号 获取
        NSString *title = [resultSET stringForColumn:@"title"];
        NSString *url = [resultSET stringForColumn:@"url"];
        //创建对象 保存信息
        QpfmdbModel *l = [[QpfmdbModel alloc]init];
        l.title = title;
        l.url = url;
        // 添加到数组中
        [arr addObject:l];
    }
    return arr;
}
/// 批量
//- (void)insertlaowangMax:(QpfmdbModel *)lanou
//{
//    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"fmdb.db"];
//    // FMDB 多线程队列 将对各操作放入子线程执行 提高执行效率
//    FMDatabaseQueue *dbq = [FMDatabaseQueue databaseQueueWithPath:path];
//    // 将操作放入FMDB 的事务中 Transaction
//    [dbq inTransaction:^(FMDatabase *db, BOOL *rollback) {
//        NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO lanou151129 (name, gender) VALUES ('%@', '%@')", lanou.name ,lanou.gender];
//        BOOL result = [db executeUpdate:insertSQL];
//        if (result) {
//            NSLog(@"100个老王");
//        }
//    }];
//}
// 封装: 执行+判断
// 参数1: 需要执行的SQL语句
// 参数2: 执行之后的打印信息
- (void) executeSQL:(NSString *)sql message:(NSString *)mes
{
    // 执行
    BOOL result = [_fmdb executeUpdate:sql];
    // 判断
    if (result) {
        NSLog(@"%@成功", mes);
    }else{
        NSLog(@"%@失败", mes);
    }
    
}



@end
